perm filename DPYCHR.SAI[T,LCS] blob sn#029393 filedate 1973-03-08 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00002 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	BEGIN "TEST"
C00005 ENDMK
C⊗;
BEGIN "TEST"

REQUIRE "ABRIV[MUS,TVR]" SOURCE_FILE;
REQUIRE "HALVES[1,TVR]" SOURCE_FILE;


INT PROC DPYCHR(INT CHAR,X,Y; SAFE INT ARRAY FONT,ROWTAB,COLTAB);
⊂ INT BYTES,ADR,Y0,WIDTH,INC,TMP,PTR1,PTR2;
COMMENT 

RETURNS:

0	Character successfully deposited.
1	No such character defined in the font.
2	Invalid font file.
3	X or Y out of range.
4	Would overflow in x direction if character deposited
5	Character too tall (would overflow in Y direction)
;
  IF FONT[CHAR]≤0 THEN RETURN(1);
  IF (ADR←HRRE(FONT[CHAR]))≥ARRINFO(FONT,2)∨
      ADR+HRRE(FONT[ADR])>ARRINFO(FONT,2)∨
      HRRE(FONT[ADR←HRRE(FONT[CHAR])])≠CHAR
    THEN RETURN(2);
  IF X<ARRINFO(COLTAB,1)∨X>ARRINFO(COLTAB,2)∨
      Y<ARRINFO(ROWTAB,1)∨Y>ARRINFO(ROWTAB,2)
    THEN RETURN(3);
  IF X+(WIDTH←HLRE(FONT[CHAR]))>ARRINFO(COLTAB,2) THEN RETURN(4);
  IF (Y0←Y-FONT['203]+HLRE(FONT[ADR+1]))<ARRINFO(ROWTAB,1) THEN RETURN(5);
  IF (BYTES←36%WIDTH)=0 THEN BYTES←1;
  PTR1←POINT(1,FONT[ADR+2],-1);
  PTR2←COLTAB[X]+ROWTAB[Y0]+'010000000000;
  INC←ROWTAB[Y0+1]-ROWTAB[Y0];
  TMP←HRRE(FONT[ADR+1]);
  S⊂ ACCUMULATORS({P1,P2,R,C,B,CNT});
	LABEL L1,L2,L3,L4;
	MOVE R,TMP;
	MOVE P1,PTR1;
	MOVE P2,PTR2;
	MOVE B,BYTES;
L1:	MOVE C,WIDTH;
L2:	ILDB 1,P1;
	ILDB 0,P2;
	IORI 0,(1);
	DPB 0,P2;
	JUMPG P2,L3;
	TLZ P2,'770000;
L3:	SOJG C,L2;
	MOVE P2,INC;
	ADDB P2,PTR2;
	SOJG B,L4;
	TLZ P1,'770000;
L4:	SOJG R,L1 ⊃;
  RETURN(0) ⊃;